import java.util.HashMap;
import java.util.HashSet;

public class Leet771 {
    /**
     * 给定字符串J 代表石头中宝石的类型，和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型，你想知道你拥有的石头中有多少是宝石。
     J 中的字母不重复，J 和 S中的所有字符都是字母。字母区分大小写，因此"a"和"A"是不同类型的石头。
     示例 1:
     输入: J = "aA", S = "aAAbbbb"
     输出: 3
     *
     * @param J
     * @param S
     * @return
     */
    //hashset 法
    public int numJewelsInStones(String J, String S) {
        int ant=0;
        HashSet <Character> hashSet=new HashSet();
            for (int i=0;i<J.length();i++){
                    hashSet.add(J.charAt(i));
            }
            for (int j=0;j<S.length();j++){
                if (hashSet.contains(S.charAt(j))){
                    ant++;
                }
            }
        return ant;
    }
    //hash map 法 先统计自己手中石头各个种类的个数，在比照宝石库，
    public int numJewelsInStones2(String J, String S) {

        int ant=0;
        HashMap<Character,Integer> hashMap=new HashMap<Character, Integer>();
        for (int i=0;i<S.length();i++){
            if (hashMap.containsKey(S.charAt(i))){
                hashMap.replace(S.charAt(i),hashMap.get(S.charAt(i)),hashMap.get(S.charAt(i))+1);
            }else{
                hashMap.put(S.charAt(i),1);
            }
        }
        for (int j=0;j<J.length();j++){
            if (hashMap.containsKey(J.charAt(j))){
                ant=ant+hashMap.get(J.charAt(j));
            }
        }
        return ant;
    }
}